package cn.liontalk.demo.annotation;


import cn.liontalk.demo.scope.BeanMyScope;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;

import java.lang.annotation.*;

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Scope(BeanMyScope.SCOPE_MY)
public @interface MyScope {

    /**
     * @see Scope#proxyMode()
     *
     * 注意这个地方，参数名称也是proxyMode，类型也是ScopedProxyMode，
     * 而@Scope注解中有个和这个同样类型的参数，spring容器解析的时候，
     * 会将这个参数的值赋给@MyScope注解上面的@Scope注解的proxyMode参数，
     * 所以此处我们设置proxyMode值，最后的效果就是直接改变了@Scope中proxyMode参数的值。
     * 此处默认值取的是ScopedProxyMode.TARGET_CLASS
     */
    ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;//@2

}
